/**
 * Trabajo de Ingeniería de Software 2
 * Año 2008
 * Sistema de Reserva de Recursos.
 * Desarrolladores: - Marcelo Ferreira.
 *                  - Christian Gómez.
 *                  - Marcelo Rodas.
 */


package modelo;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Clase Entidad Rol (JPA)
 * @author cgomez
 */
@Entity
@Table(name = "rol")
@NamedQueries({@NamedQuery(name = "Rol.findByIdRol", query = "SELECT r FROM Rol r WHERE r.idRol = :idRol"), @NamedQuery(name = "Rol.findByDescripcionRol", query = "SELECT r FROM Rol r WHERE r.descripcionRol = :descripcionRol")})
public class Rol implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "idRol", nullable = false)
    private Integer idRol;
    @Column(name = "descripcionRol", nullable = false)
    private String descripcionRol;
    @OneToMany(mappedBy = "idRol")
    private Collection<Usuario> usuarioCollection;
    @OneToMany(mappedBy = "rol")
    private Collection<Permisorol> permisorolCollection;

    /**
     * Crea una nueva instancia de Rol
     */ 
    public Rol() {
    }

    /**
     * Crea una nueva instancia de Rol con valores especificos
     * @param idRol El idRol de Rol
     */    
    public Rol(Integer idRol) {
        this.idRol = idRol;
    }
    /**
     * Crea una nueva instancia de Rol con valores especificos
     * @param idRol
     * @param descripcionRol
     */
    public Rol(Integer idRol, String descripcionRol) {
        this.idRol = idRol;
        this.descripcionRol = descripcionRol;
    }
    
    /**
     * Obtiene el idRol de Rol
     * @return int El idRol de Rol
     */
    public Integer getIdRol() {
        return idRol;
    }
    
    /**
     * Fija el identificador idRol de Rol al valor especificado
     * @param idRol El identificador idRol de Rol
     */
    public void setIdRol(Integer idRol) {
        this.idRol = idRol;
    }
    
    /**
     * Obtiene el DescripcionRol de Rol
     * @return String El DescripcionRol de Rol
     */
    public String getDescripcionRol() {
        return descripcionRol;
    }
    
    /**
     * Fija el identificador DescripcionRol de Rol al valor especificado
     * @param descripcionRol El identificador descripcionRol de Rol
     */
    public void setDescripcionRol(String descripcionRol) {
        this.descripcionRol = descripcionRol;
    }
    
    /**
     * Obtiene una coleccion del tipo rol
     * @return Collection<Usuario> Una coleccion de objetos tipo Rol
     */
    public Collection<Usuario> getUsuarioCollection() {
        return usuarioCollection;
    }
    
    /**
     * Fija el identificador usuarioCollection de Rol al valor especificado
     * @param usuarioCollection El identificador usuarioCollection de Rol
     */
    public void setUsuarioCollection(Collection<Usuario> usuarioCollection) {
        this.usuarioCollection = usuarioCollection;
    }
    
    /**
     * Obtiene el Collection<Permisorol> de Rol
     * @return permisorolCollection El permisorolCollection de Rol
     */
    public Collection<Permisorol> getPermisorolCollection() {
        return permisorolCollection;
    }
    
    /**
     * Fija el identificador permisorolCollection de Rol al valor especificado
     * @param permisorolCollection El identificador permisorolCollection de Rol
     */
    public void setPermisorolCollection(Collection<Permisorol> permisorolCollection) {
        this.permisorolCollection = permisorolCollection;
    }
    
    /**
     * Retorna un valor de Hash para el objeto.
     * Esta implementacion evalua un valor hash basado sobre los campos id en este objeto
     * @return Un valor de hash para este objeto
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idRol != null ? idRol.hashCode() : 0);
        return hash;
    }
    
    /**
     * Determina si otro objeto es igual a Permiso. El resultado es
     * <code>true</code> si y solo si el argumento no es nulo y es un objeto Permiso
     * que tiene el mismo valor del campo id en este objeto.
     * @param object La referencia objeto con el cual comparar
     * @return <code>true</code> Si este objeto es la misma que su argumento;
     * <code>false</code> si no lo es.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Rol)) {
            return false;
        }
        Rol other = (Rol) object;
        if ((this.idRol == null && other.idRol != null) || (this.idRol != null && !this.idRol.equals(other.idRol))) {
            return false;
        }
        return true;
    }
    
    /**
     * Retorna una representacion String de este objeto.  Esta implementacion This implementation construye
     * la representacion basada en los campos.
     * @return Una representacion String del objeto.
     */
    @Override
    public String toString() {
        return idRol + "("+this.getDescripcionRol()+")";
    }

}
